package com.atguigu.gmall.product.service.impl;

import com.atguigu.gmall.model.product.*;
import com.atguigu.gmall.product.mapper.*;
import com.atguigu.gmall.product.service.SpuManagerService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.bouncycastle.jcajce.provider.util.SecretKeyUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

@Service
public class SpuManagerServiceImpl implements SpuManagerService {

    @Autowired
    private SpuInfoMapper spuInfoMapper;

    @Autowired
    private BaseTrademarkMapper baseTrademarkMapper;

    @Autowired
    private SpuSaleAttrMapper spuSaleAttrMapper;

    @Autowired
    private SpuImageMapper spuImageMapper;


    @Autowired
    private SpuSaleAttrValueMapper spuSaleAttrValueMapper;

    @Autowired
    private BaseSaleAttrMapper baseSaleAttrMapper;

    @Autowired
    private SkuInfoMapper skuInfoMapper;

    @Autowired
    private SkuImageMapper skuImageMapper;

    @Autowired
    private SkuAttrValueMapper skuAttrValueMapper;

    @Autowired
    private SkuSaleAttrValueMapper skuSaleAttrValueMapper;

    public Page<SpuInfo> spuInfoPageList(Integer page, Integer limit, Long category3Id) {
        Page<SpuInfo> spuInfoPage = new Page<>(page,limit);
        QueryWrapper<SpuInfo> wrapper = new QueryWrapper();
        wrapper.eq("category3_id",category3Id);
        spuInfoMapper.selectPage(spuInfoPage,wrapper);
        return spuInfoPage;
    }

   //品牌列表
    public List<BaseTrademark> getTrademarkList() {
        List<BaseTrademark> baseTrademarks = baseTrademarkMapper.selectList(null);
        return baseTrademarks;
    }

    //销售属性列表
    public List<BaseSaleAttr> baseSaleAttrList() {
        List<BaseSaleAttr> baseSaleAttrs = baseSaleAttrMapper.selectList(null);
        return baseSaleAttrs;
    }

    //添加spu信息
    public void saveSpuInfo(SpuInfo spuInfo) {
        spuInfoMapper.insert(spuInfo);
        //spu图片
        List<SpuImage> spuImageList = spuInfo.getSpuImageList();
        //spu属性
        List<SpuSaleAttr> spuSaleAttrList = spuInfo.getSpuSaleAttrList();
        //1.添加图片
        spuImageList.forEach((spuImage)->{
            spuImage.setSpuId(spuInfo.getId());
            spuImageMapper.insert(spuImage);
        });
        //2.添加spu属性与属性值
        spuSaleAttrList.forEach((spuSaleAttr)->{
            spuSaleAttr.setSpuId(spuInfo.getId());
            spuSaleAttrMapper.insert(spuSaleAttr);
            List<SpuSaleAttrValue> spuSaleAttrValueList = spuSaleAttr.getSpuSaleAttrValueList();
            spuSaleAttrValueList.forEach((spuSaleAttrValue)->{
                spuSaleAttrValue.setSpuId(spuInfo.getId());
                spuSaleAttrValue.setSaleAttrName(spuSaleAttr.getSaleAttrName());
                spuSaleAttrValueMapper.insert(spuSaleAttrValue);
            });
        });
    }
    //根据spuId获取图片列表
    public List<SpuImage> spuImageList(Long spuId) {
        QueryWrapper<SpuImage> wrapper = new QueryWrapper<>();
        wrapper.eq("spu_id",spuId);
        List<SpuImage> spuImages = spuImageMapper.selectList(wrapper);
        return spuImages;
    }

    //sku分页列表
    public Page<SkuInfo> getSkuList(Integer page, Integer limit) {
        Page<SkuInfo> skuInfoPage = new Page<>(page,limit);
        skuInfoMapper.selectPage(skuInfoPage,null);
        return skuInfoPage;
    }


    //添加sku
    public void saveSkuInfo(SkuInfo skuInfo) {
        //1.添加skuInfo
        skuInfoMapper.insert(skuInfo);
        Long skuInfoId = skuInfo.getId();
        Long spuId = skuInfo.getSpuId();
        List<SkuImage> skuImageList = skuInfo.getSkuImageList();
        List<SkuAttrValue> skuAttrValueList = skuInfo.getSkuAttrValueList();
        List<SkuSaleAttrValue> skuSaleAttrValueList = skuInfo.getSkuSaleAttrValueList();
        //2.添加skuImageList表
        skuImageList.forEach((skuImage)->{
            skuImage.setSkuId(skuInfoId);
            skuImageMapper.insert(skuImage);
        });
        //3.添加SkAttrValue
        skuAttrValueList.forEach((skuAttrValue)->{
            skuAttrValue.setSkuId(skuInfoId);
            skuAttrValueMapper.insert(skuAttrValue);
        });
        //4.添加sku_sale_attr_value
        skuSaleAttrValueList.forEach((skuSaleAttrValue)->{
            skuSaleAttrValue.setSpuId(spuId);
            skuSaleAttrValue.setSkuId(skuInfoId);
            skuSaleAttrValueMapper.insert(skuSaleAttrValue);
        });
    }
    //商品上架
    public void onSale(Long skuId) {
        SkuInfo skuInfo = new SkuInfo();
        skuInfo.setIsSale(SkuInfo.ONSAFE);
        skuInfo.setId(skuId);
        skuInfoMapper.updateById(skuInfo);
        //TODO.......
    }

   //商品下架
    public void cancelSale(Long skuId) {
        SkuInfo skuInfo = new SkuInfo();
        skuInfo.setIsSale(SkuInfo.CANCELSAFE);
        skuInfo.setId(skuId);
        skuInfoMapper.updateById(skuInfo);
        //TODO..........
    }

    @Override
    public List<SpuSaleAttr> spuSaleAttrList(Long spuId) {
        List<SpuSaleAttr> spuSaleAttrs = spuSaleAttrMapper.spuSaleAttrList(spuId);
        return spuSaleAttrs;
    }
}
